#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define vbe(v,n,m) v.begin()+n,v.begin()+m
#define int long long
#define fi first
#define sec second
const int mod=1e9+7;
const int N=1e5+7;
#define cy cout<<"YES"<<"\n"
#define cn cout<<"NO"<<"\n"
#define ch(n) cout<<"hello-"<<n<<"\n"
#define cot(n) cout<<n<<"\n"
#define ret(n) cout<<n<<"\n";return
#define print(v) for(auto &it:v){cout<<it<<' ';}cout<<"\n";
void judge(){
#ifndef ONLINE_JUDJE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
}
void solve(){
int r, c;
cin >> r >> c;
if(r==1 && c==1){
ret(0);
}
/////////////////////////////////////////////////////////////////////
if(r==1){
int ct = 2;
for (int i = 0; i < c;i++){
cout << ct <<' ';
ct++;
}
return;
}
else if(c==1){
int ct = 2;
for (int i = 0; i < r;i++){
cout << ct << '\n';
ct++;
}
return;
}
/////////////////////////////////////////////////////////////////////
bool cc = false;
bool rr = false;
if(c<r){
cc = true;
}
else if(c>r){
rr = true;
// ch(66);
}
vector<int> row(c, 0);
row[0] = 2;
row[1] = 3;
for (int i = 2; i < c;i++){
if(rr && row[i-1]>=(2*r)){
row[i] = row[i - 1] + 1;
}
else{
row[i] = row[i - 1] + 2;
}
}
/////////////////////////////////////////////////////////////////////
vector<int> col(r, 0);
col[0] = 1;
col[1] = 4;
for (int i = 2; i < r;i++){
if(cc && col[i-1]>=2*c){
col[i] = col[i - 1] + 1;
}
else{
col[i] = col[i - 1] + 2;
}
}
/////////////////////////////////////////////////////////////////////
for (int i = 0; i < r;i++){
for (int j = 0; j < c;j++){
cout << row[j] * col[i] << ' ';
}
cout << '\n';
}
//////////////////////////////////////////////////////////////////////
}
signed main()
{
//judge();
ios_base::sync_with_stdio(false);
cin.tie(NULL);
// int test=0;
// cin>>test;
// while (test--){
solve();
// }
return 0;
}
617. Merge Two Binary Trees | 1450. Number of Students Doing Homework at a Given Time |
700. Search in a Binary Search Tree | 590. N-ary Tree Postorder Traversal |
589. N-ary Tree Preorder Traversal | 1299. Replace Elements with Greatest Element on Right Side |
1768. Merge Strings Alternately | 561. Array Partition I |
1374. Generate a String With Characters That Have Odd Counts | 1822. Sign of the Product of an Array |
1464. Maximum Product of Two Elements in an Array | 1323. Maximum 69 Number |
832. Flipping an Image | 1295. Find Numbers with Even Number of Digits |
1704. Determine if String Halves Are Alike | 1732. Find the Highest Altitude |
709. To Lower Case | 1688. Count of Matches in Tournament |
1684. Count the Number of Consistent Strings | 1588. Sum of All Odd Length Subarrays |
1662. Check If Two String Arrays are Equivalent | 1832. Check if the Sentence Is Pangram |
1678. Goal Parser Interpretation | 1389. Create Target Array in the Given Order |
1313. Decompress Run-Length Encoded List | 1281. Subtract the Product and Sum of Digits of an Integer |
1342. Number of Steps to Reduce a Number to Zero | 1528. Shuffle String |
1365. How Many Numbers Are Smaller Than the Current Number | 771. Jewels and Stones |